package com.hanser.hancoder.core.saver;

import cn.hutool.core.util.StrUtil;
import com.hanser.hancoder.ai.model.MultiFileCodeResult;
import com.hanser.hancoder.exception.BusinessException;
import com.hanser.hancoder.exception.ErrorCode;
import com.hanser.hancoder.model.enums.CodeGenTypeEnum;

/**
 * 多文件代码保存模板实现类
 * 用于将AI生成的HTML、CSS、JS代码分别保存为独立的文件
 */
public class MultiFileCodeFileSaverTemplate extends CodeFileSaverTemplate<MultiFileCodeResult> {
    
    /**
     * 获取代码生成类型枚举值
     * 
     * @return CodeGenTypeEnum.MULTI_FILE 多文件生成类型
     */
    @Override
    protected CodeGenTypeEnum getCodeGenType() {
        return CodeGenTypeEnum.MULTI_FILE;
    }

    /**
     * 保存文件的具体实现
     * 将MultiFileCodeResult中的HTML、CSS、JS代码分别写入对应的文件中
     * 
     * @param result      包含HTML、CSS、JS代码的结果对象
     * @param baseDirPath 基础目录路径
     */
    @Override
    protected void saveFile(MultiFileCodeResult result, String baseDirPath) {
        // 保存HTML代码到index.html文件
        writeToFile(baseDirPath, "index.html", result.getHtmlCode());
        // 保存CSS代码到style.css文件
        writeToFile(baseDirPath, "style.css", result.getCssCode());
        // 保存JS代码到script.js文件
        writeToFile(baseDirPath, "script.js", result.getJsCode());
    }

    /**
     * 验证输入参数
     * 在父类验证的基础上，增加对HTML代码是否为空的验证
     * 
     * @param result 代码生成结果对象
     * @throws BusinessException 当HTML代码为空时抛出业务异常
     */
    @Override
    protected void validateInput(MultiFileCodeResult result) {
        // 调用父类的验证方法
        super.validateInput(result);
        // 验证HTML代码是否为空
        if (StrUtil.isBlank(result.getHtmlCode())){
            throw new BusinessException(ErrorCode.SYSTEM_ERROR, "HTML代码不能为空");
        }
    }
}
